/**
 * Copyright  (c) 2009-2013 XLab,  Org. 
 * All  rights  reserved. 
 */
package org.xlab.baseframework.dao.api;

import java.io.Serializable;
import java.util.Collection;

import org.xlab.baseframework.domain.ILogicalRemoveSupportedDomain;
import org.xlab.baseframework.exception.UnsupportedOperationException;

/**
 * <p>支持逻辑删除的DAO所使用的接口 </p>
 * 
 * @author MaKuBEX Email:makubexnet@gmail.com
 * @version 1.0.0 Sep 6, 2010
 * @since 1.0.0
 * 
 */
public interface ILogicRemoveDAO<T extends ILogicalRemoveSupportedDomain, PK extends Serializable> extends
		IBaseDAO<T, PK> {
	/**
	 * <p>
	 * 将一个已经被序列化的对象进行逻辑删除
	 * </p>
	 * 
	 * @param instance
	 *            已经被序列化到数据库中的对象
	 * @throws UnsupportedOperationException
	 *             如果该对象并不支持被逻辑删除
	 */
	public void logicRemove(T instance) throws UnsupportedOperationException;

	/**
	 * <p>
	 * 将一个已经被序列化的对象集合进行逻辑删除
	 * </p>
	 * 
	 * @param instanceCollection
	 *            已经被序列化的对象集合
	 * @throws UnsupportedOperationException
	 *             如果该对象并不支持被逻辑删除
	 */
	public void logicRemoveAll(Collection<T> instanceCollection)
			throws UnsupportedOperationException;

	/**
	 * <p>
	 * 将一个已经被序列化并且已经被逻辑删除的对象进行逻辑还原
	 * </p>
	 * 
	 * @param instance
	 *            已经被序列化到数据库中的对象
	 * @throws UnsupportedOperationException
	 *             如果该对象并不支持被逻辑删除
	 */
	public void logicRestore(T instance) throws UnsupportedOperationException;

	/**
	 * <p>
	 * 将一个已经被序列化并且已经被逻辑删除的对象集合进行逻辑还原
	 * </p>
	 * 
	 * @param instanceCollection
	 *            已经被序列化的对象集合
	 * @throws UnsupportedOperationException
	 *             如果该对象并不支持被逻辑删除
	 */
	public void logicRestoreAll(Collection<T> instanceCollection)
			throws UnsupportedOperationException;
}
